#include<iostream>
#include<vector>
#include<string>
#include<unistd.h>
#include<pthread.h>
//本代码目的：证明主线程和新线程全局数据、全局指针、全局函数是共享的
//但如果新线程在内部申请了空间，这部分空间是新线程自己，不和主线程共享

//-------全局变量-------------
volatile int gval = 100;
int *data = new int(0);
std::string fun()
{
    return "我是一个函数";
}
//-----------------------------

void*thread_routine(void* args)
{
    // 这里new堆空间就是该线程申请的
    //往往只需要让对应的线程知道这部分堆空间起始虚拟地址就可以
    //叫做这个堆是该线程拥有的，其他线程看不到
    int* data=new int(10);
     while (true )
    {
        printf("new thread...: gval: %d, &gval %p, %s, data : %p, %d\n",
               gval, &gval, fun().c_str(), data, *data);
        gval++;
        sleep(1);
    }
    // 如果线程执行完了自己的入口函数，表明该线程退出
    return nullptr;

} 

int main()
{
    
    pthread_t tid;
    int n = pthread_create(&tid,nullptr,thread_routine,(void*)"thread_1");
    //sleep(2);//确保新线程执行好了，主线程才执行
    while(true)
    {
        printf("main pthread....: gval: %d,&gval: %p, %s, data: %p, %d\n",
        gval,&gval,fun().c_str(),data,*data);
        sleep(1);
    }

    // 如果main结束，表示主线程结束，同时也表示当前进程结束 -- 释放资源
    //进程结束，所有线程全部退出哪怕没有执行完
    return 0;
}